Biblioshop - MySQL DDL
Home

Biblioshop - MySQL DDL

Biblioshop - MySQL DDL

We schrijven de SQL om de tabellen te maken op basis van Biblioshop - logisch model. De SQL om tabellen te maken behoort bij de DDL of Data Definition Language.

Probleem

We maken de database en de tabellen niet aan met behulp van een visuele designer maar met behulp van SQL scripts.

Oplossing

  1. Globals instellen

    Je stelt die alleen in op je lokale MySQL Server, niet op de remote SQL server.

    SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    SET GLOBAL sql_mode = 'ANSI';
  2. Database maken

    Je creëert een database alleen op je lokale MySQL Server, niet op de remote SQL server. Gebruik je de naam van je eigen database.

    -- If database does not exist, create the database
    CREATE DATABASE IF NOT EXISTS docent1;
    
  3. Database activeren

    Gebruik de naam van je eigen database.

    USE docent1;
  4. Foreign Key constraints opheffen
    -- With the MySQL FOREIGN_KEY_CHECKS variable,
    -- you don't have to worry about the order of your
    -- DROP and CREATE TABLE statements at all, and you can
    -- write them in any order you like, even the exact opposite.
    SET FOREIGN_KEY_CHECKS = 0;
  5. DDL voor de tabel Customer
    Over de tabel Customer valt niet veel te zeggen.
    1. De kolom Id is de primary key. Met AUTO_INCREMENT wordt de waarde in de kolom Id telkens met 1 vermeerderd.
    2. En we voegen er de constraint NOT NULL aan toe om de vermijden dat die leeg zou zijn.
    3. Let erop hoe we een UNIQUE constraint toevoegen voor de kolom Email. In het logisch model staat immers opgegeven dat die waarde uniek moet zijn. D.w.z. dat er in de tabel geen dubbels mogen zitten.
    4. Vooraleer de tabel te creëren gaan we na of de tabel al bestaat. Als de tabel bestaat wordt die eerst verwijderd.
    5. Code:
      -- modernways.be
      -- created by an orm apart
      -- Entreprise de modes et de manières modernes
      -- MySql: CREATE TABLE Customer
      -- Created on Tuesday 24th of November 2020 04:38:06 PM
      -- 
      DROP TABLE IF EXISTS `Customer`;
      CREATE TABLE `Customer` (
          `Email` NVARCHAR (255) NOT NULL,
          `FirstName` NVARCHAR (255) NOT NULL,
          `LastName` NVARCHAR (255) NOT NULL,
          `Address` NVARCHAR (255) NOT NULL,
          `City` NVARCHAR (255) NOT NULL,
          `PostalCode` VARCHAR (20) NOT NULL,
          `Country` NVARCHAR (50) NULL,
          `Phone` VARCHAR (40) NULL,
          `Id` INT NOT NULL AUTO_INCREMENT,
          CONSTRAINT PRIMARY KEY(`Id`),
          CONSTRAINT uc_Customer_Email UNIQUE (Email));
      
      
    6. DDL voor de tabel Order
      Dit is een interessantere tabel.
      1. Zoals je hieronder ziet zijn er drie vreemde sleutels. Eén die verwijst naar de Customer, één naar de ShippingMethod en de derde naar OrderStatus.
      2. We voegen ook de NOT NULL constraints toe die in het logisch model zijn opgeslagen.
      3. Code:
        -- modernways.be
        -- created by an orm apart
        -- Entreprise de modes et de manières modernes
        -- MySql: CREATE TABLE Order
        -- Created on Tuesday 24th of November 2020 04:38:06 PM
        -- 
        DROP TABLE IF EXISTS `Order`;
        CREATE TABLE `Order` (
            `OrderDate` DATETIME NOT NULL,
            `ShippingDate` DATETIME NOT NULL,
            `Comment` NVARCHAR (512) NULL,
            `Id` INT NOT NULL AUTO_INCREMENT,
            CONSTRAINT PRIMARY KEY(`Id`),
            `CustomerId` INT NOT NULL,
            `ShippingMethodId` INT NOT NULL,
            `StatusId` INT NOT NULL,
            CONSTRAINT fk_OrderCustomerId FOREIGN KEY (`CustomerId`) REFERENCES `Customer` (`Id`),
            CONSTRAINT fk_OrderShippingMethodId FOREIGN KEY (`ShippingMethodId`) REFERENCES `ShippingMethod` (`Id`),
            CONSTRAINT fk_OrderStatusId FOREIGN KEY (`StatusId`) REFERENCES `OrderStatus` (`Id`));

JI
2020-11-24 16:47:33